/**
 * 1. 状态1是已预售
 * 2. 状态2是部分产品处于正常促销阶段
 * 3. 状态3是有些产品没有任何促销活动
 **/ 
/**
 * 什么情况下使用策略模式？存在以下特征：
 * 1. 判断条件很多
 * 2. 各个判断条件下的代码相互独立
 * 可以将每个判断条件下的代码封装成一个函数，然后建立判断条件和具体策略的映射关系 
 **/ 
const priceStrategies = {
    'pre-sale':preShop,
    'promotion':someShop,
    'default':defaultShop
}

function getGoodsPrice(originalPrice, status) {
   return priceStrategies[status](originalPrice)
}

function preShop(price) {
    return 0.8 * price
}
function someShop(price) {
    if(price < 100) return 0.9 * price
    return price - 10
}
function defaultShop(price) {
    return price
}
console.log(getGoodsPrice(1000, 'default'));